VSCodeでblackとflake8の設定をしてみた
DA事業本部の横山です。
プロジェクトでPython用にFormatterとLinterを導入することとなり、blackとflake8を採用しました。 ファイル保存時に両者を適用するためのVSCodeの設定内容について記載します。
black
PythonのFormatterで、PEP8に準拠した形でコードを整形してくれます。 PythonのFormatterとしては、他にautopep8やyapf等が存在します。
blackの特徴としては、カスタマイズがほとんどできず1行あたりの最大文字数程度しか設定できません。 今回は、formatterにプロジェクト固有のルールを付与する必要がないためblackを利用することとしました。
pip install black
上記コマンドで実行環境にインストールしておきます。
flake8
PythonのLinterで、PEP8に準拠しているか、シンタックスチェック、循環的複雑度のチェックが行えます。 PythonのLinterとしては、他にpylintやProspector等が存在します。 今回は、主観ですがもっともよく見かけるものであるflake8を利用することとしました。
pip install flake8
上記コマンドで実行環境にインストールしておきます。
VSCodeによる設定
VSCodeでコーディングする際に、ファイル保存時にFormatter, Linterが適用されるように設定します。
設定内容の概要としては以下になります。
- ファイル保存時のFormatter, Linterの適用
- black, flake8の有効化
- pylintの無効化(VSCodeのPython拡張機能で有効化されていなければ不要)
- flake8の設定ファイルのパス指定
実際の設定内容は以下のようになりました。
"[Python]": { // ブログの都合でpを大文字としていますが正しくは小文字です。 "editor.formatOnSave": true, }, "python.linting.enabled": true, "python.linting.lintOnSave": true, "python.linting.pylintEnabled": false, "python.linting.flake8Enabled": true, "python.linting.flake8Args": [ "--config=${workspaceFolder}/.flake8" ], "python.formatting.provider": "black",
flake8の設定ファイルは以下になります。
[flake8] max-line-length = 88 extend-ignore = E203
blackを適用するとどうしてもflake8で問題として摘出されてしまう項目が存在するため、flake8の設定ファイルでmax-line-length
とE203
について変更しています。
flake8のE203
とは、コロンの前にスペースが不要というエラーです。
例えば以下のようなコードであればf :
ではなくf:
とすべきという指摘になります。
with open('file.dat') as f : contents = f.read()
しかし、black適用後の以下のコードについても同様に指摘してしまうため無視する必要があります。
def test(): a = list(range(10)) p = 2 a[p : p + 4]
詳細については、以下のドキュメントをご参照ください。
これらの設定をおこなうことで、pythonファイルの保存時にblackとflake8が適用されるようになりました。 これで開発者のコーディングスタイルの統一とPEP8に準拠していないコードの発見を行いやすくなりました。
おわりに
Pythonのblackとflake8を導入して、VSCodeのファイル保存時に適用する設定内容について記載しました。 開発効率の向上とコードレビュー時の労力削減等に効果があると期待しています。
以上になります。この記事がどなたかの助けになれば幸いです。